/*
 * Copyright (c) 2007, The xFTPd Project.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *
 *     * Neither the name of the xFTPd Project nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 *     * Redistributions of this project or parts of this project in any form
 *       must retain the following aknowledgment:
 *       "This product includes software developed by the xFTPd Project.
 *        http://www.xftpd.com/ - http://www.xftpd.org/"
 *
 * THIS SOFTWARE IS PROVIDED BY THE xFTPd PROJECT ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE xFTPd PROJECT BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef __LUAINIT_H
#define __LUAINIT_H

#include <lualib.h>
#include <lauxlib.h>
#include <tolua++.h>

#include "constants.h"
#include "logging.h"
#include "socket.h"

#include "debug.h"
#if defined(DEBUG_LUAINIT)
# define LUAINIT_DBG(format, arg...) { _DEBUG_CONSOLE(format, ##arg) _DEBUG_FILE(format, ##arg) }
#else
# define LUAINIT_DBG(format, arg...)
#endif

//extern lua_State* L;
/*
int luainit_init();
int luainit_reload();
void luainit_free();
*/

lua_State *luainit_newstate();
void luainit_freestate(lua_State *L);

int luainit_loadfile(lua_State *L, const char *filename);
int luainit_call(lua_State *L, const char *funcname);

int luainit_traceback(lua_State *L);
void luainit_error(lua_State *L, const char *location, int err);

int luainit_metamethod(lua_State* L, const char *name, int (* func)(lua_State* L));

void luainit_tcreate(lua_State* L, const char *table);
int luainit_tinsert(lua_State* L, const char *table, int stack_idx);
int luainit_tremove(lua_State* L, const char *table, int stack_idx);
int luainit_tget(lua_State *L, const char *table, int stack_idx);

int tolua_isfunction(lua_State* L, int lo, int def, tolua_Error* err);

int luainit_pushipaddress(lua_State* L, ipaddress ip);

#if !defined(bool)
# define bool int
#endif

// this directive should definitely be stripped off by tolua while
// transforming a .pkg file into a .c file, but turns out it's not.
#if !defined(tolua_readonly)
# define tolua_readonly 
#endif

#if !defined(tolua_outside)
# define tolua_outside 
#endif

#endif /* __LUAINIT_H */
